package org.clxmm.security.springmvc.service.impl;

import org.clxmm.security.springmvc.model.AuthenticationRequest;
import org.clxmm.security.springmvc.model.UserDto;
import org.clxmm.security.springmvc.service.AuthenticationService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

/**
 * @author clxmm
 * @Description
 * @create 2021-06-06 5:55 下午
 */
@Service
public class AuthenticationServiceImpl implements AuthenticationService {


    /**
     * 用户认证
     *
     * @param authenticationRequest 用户认证请求 * @return 认证成功的用户信息
     */
    @Override
    public UserDto authentication(AuthenticationRequest authenticationRequest) {

        if (authenticationRequest == null ||
                StringUtils.isEmpty(authenticationRequest.getUsername())
                || StringUtils.isEmpty(authenticationRequest.getPassword())
        ) {
            throw new RuntimeException("账号或密码为空");
        }
        UserDto userDto = getUserDto(authenticationRequest.getUsername());
        if (userDto == null) {
            throw new RuntimeException("查询不到该用户");
        }
        if (!authenticationRequest.getPassword().equals(userDto.getPassword())) {
            throw new RuntimeException("账号或密码错误");
        }
        return userDto;
    }


    //模拟用户查询
    public UserDto getUserDto(String username) {
        return userMap.get(username);
    }

//    //用户信息
//    private Map<String, UserDto> userMap = new HashMap<>();
//
//    {
//        userMap.put("zhangsan", new UserDto("1010", "zhangsan", "123", "张三", "133443"));
//        userMap.put("lisi", new UserDto("1011", "lisi", "456", "李四", "144553"));
//    }


    //用户信息
    private Map<String, UserDto> userMap = new HashMap<>();

    {
        Set<String> authorities1 = new HashSet<>();
        authorities1.add("p1");
        Set<String> authorities2 = new HashSet<>();
        authorities2.add("p2");
        userMap.put("zhangsan", new UserDto("1010", "zhangsan", "123", "张 三", "133443", authorities1));
        userMap.put("lisi", new UserDto("1011", "lisi", "456", "李四", "144553", authorities2));
    }


}
